package jsave.conf;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;

public class Configurations {

	private static final Logger log = Logger.getLogger(Configurations.class);

	private static Configurations configurations = null;

	private List<Configuration> configs = null;

	private int indConfigCourante = -1;

	private Configurations() {

		configs = new ArrayList<Configuration>();
	}

	public static Configurations getInstance() {

		if (configurations == null) {
			configurations = new Configurations();
		}

		return configurations;
	}

	public void ajouterConfig(Configuration config) {
		configs.add(config);
	}

	/**
	 * @deprecated
	 */
	public Configuration getConfigSuivante() {

		indConfigCourante++;
		if (indConfigCourante < configs.size()) {
			return (Configuration) configs.get(indConfigCourante);
		} else {
			return null;
		}
	}

	public Configuration getConfigCourante() {

		if (indConfigCourante != -1 && indConfigCourante < configs.size()) {
			return (Configuration) configs.get(indConfigCourante);
		} else {
			return null;
		}
	}

	public int getNbConfigs() {
		return configs.size();
	}

	public Configuration getConfig(int pos) {

		if (pos >= 0 && pos < configs.size()) {
			indConfigCourante = pos;
			return (Configuration) configs.get(pos);
		} else {
			return null;
		}
	}

	public Iterator<Configuration> iterator() {

		return configs.iterator();
	}

	public void interruptionUtilisateur() {

		Configuration config = getConfigCourante();

		if (config.getActionA().getCopieEnCours() != null) {
			log
					.info("Le fichier etait en cours de copie et n'est plus valide :");
			log.info(config.getActionA().getCopieEnCours().getPath());
		}
		if (config.getActionB().getCopieEnCours() != null) {
			log
					.info("Le fichier etait en cours de copie et n'est plus valide :");
			log.info(config.getActionB().getCopieEnCours().getPath());
		}
		if (config.getActionC().getCopieEnCours() != null) {
			log
					.info("Le fichier etait en cours de copie et n'est plus valide :");
			log.info(config.getActionC().getCopieEnCours().getPath());
		}
		if (config.getActionD().getCopieEnCours() != null) {
			log
					.info("Le fichier etait en cours de copie et n'est plus valide :");
			log.info(config.getActionD().getCopieEnCours().getPath());
		}
	}

	public boolean isAllSavesDone() {

		for (int i = configs.size() - 1; i >= 0; i--) {
			if (((Configuration) configs.get(i)).isActif()) {
				return false;
			}
		}

		return true;
	}

	public boolean configurationExiste(String nom) {

		for (int i = configs.size() - 1; i >= 0; i--) {
			if (((Configuration) configs.get(i)).getNom().equals(nom)) {
				return true;
			}
		}

		return false;
	}

	public Configuration getConfig(String nom) {

		for (int i = configs.size() - 1; i >= 0; i--) {
			if (((Configuration) configs.get(i)).getNom().equals(nom)) {
				return ((Configuration) configs.get(i));
			}
		}

		return null;
	}

	public List<Configuration> getAllConfigurations() {
		return configs;
	}
}
